package com.testing.class8;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Homework7 {

    public static void main(String[] args) {
        String a="roys@sina.cn";
        String emails=("(^[a-z0-9A-Z]\\w{0,}){4,16}(@sina.cn)+$");
        System.out.println(a.matches(emails));
//        System.out.println(checkemail(a));
//        dataToJson();
    }


    public static boolean checkemail(String email){
        /**
         *
         *         //邮箱的特征：
         *         //邮箱名@二级域名.一级域名   .com.cn   .com .org .edu
         *         //邮箱名可以包含 英文字母，数字，下划线和-以及中文字符   [A-Za-z0-9_-\u4e00-\u9fa5]
         *         // \\u4e00-\\u9fa5 代表unicode编码中的中文，注意写到java里面\\u 的转义要用两根\\
         *         //二级域名，如qq 163 sina  \w+
         *         //3级域名  \\.\\w+ 可能出现1到2次
         */
        String emailregex="[A-Za-z0-9_\\u4e00-\\u9fa5]{3,}@\\w+(\\.\\w+){1,2}";
//        email=email.replaceAll("[A-Za-z0-9_\\-\\u4e00-\\u9fa5]{3,}@","smtp.");
        System.out.println(email);
        return email.matches(emailregex);
    }

    public static void dataToJson(){
        String ipResult="jQuery1102029793080973590014_1607261163703({\"ResultCode\":\"0\",\"ResultNum\":\"1\",\"Result\":[{\"DisplayData\":{\"strategy\":{\"tempName\":\"ip\",\"precharge\":\"0\",\"ctplOrPhp\":\"1\"},\"resultData\":{\"tplData\":{\"srcid\":\"5809\",\"resourceid\":\"5809\",\"OriginQuery\":\"3.3.3.3\",\"origipquery\":\"3.3.3.3\",\"query\":\"3.3.3.3\",\"origip\":\"3.3.3.3\",\"location\":\"\\u7f8e\\u56fd \\u4e9a\\u9a6c\\u900a\\u4e91\",\"userip\":\"\",\"showlamp\":1,\"tplt\":\"ip\",\"titlecont\":\"IP\\u5730\\u5740\\u67e5\\u8be2\",\"realurl\":\"http:\\/\\/www.ip138.com\\/\",\"showLikeShare\":\"1\",\"shareImage\":\"1\",\"data_source\":\"AE\"},\"extData\":{\"tplt\":\"ip\",\"resourceid\":\"5809\",\"OriginQuery\":\"3.3.3.3\"}}},\"ResultURL\":\"http:\\/\\/www.ip138.com\\/\",\"Weight\":\"2\",\"Sort\":\"1\",\"SrcID\":\"5809\",\"ClickNeed\":\"0\",\"SubResult\":[],\"SubResNum\":\"0\",\"ar_passthrough\":[],\"RecoverCacheTime\":\"0\"}],\"QueryID\":\"172091755\",\"Srcid\":\"5809\",\"status\":\"0\",\"data\":[{\"srcid\":\"5809\",\"resourceid\":\"5809\",\"OriginQuery\":\"3.3.3.3\",\"origipquery\":\"3.3.3.3\",\"query\":\"3.3.3.3\",\"origip\":\"3.3.3.3\",\"location\":\"\\u7f8e\\u56fd \\u4e9a\\u9a6c\\u900a\\u4e91\",\"userip\":\"\",\"showlamp\":1,\"tplt\":\"ip\",\"titlecont\":\"IP\\u5730\\u5740\\u67e5\\u8be2\",\"realurl\":\"http:\\/\\/www.ip138.com\\/\",\"showLikeShare\":\"1\",\"shareImage\":\"1\"}]})";
        //提取符合条件的以{开头，}]}结尾的字符串。用正则表达式来表达这个规则。
        //用(.*?)来表示需要获取的内容，是个长度不定的任意字符组成的词组
        String regex= "\\{(.*?)\\}\\]\\}";
        //基于正则表达式创建一个模板
        Pattern ipPattern=Pattern.compile(regex);
        //基于模板，去为想要匹配的字符串，创建一个匹配器。
        Matcher ipMatcher=ipPattern.matcher(ipResult);
        //进行查找
        String ipJson;
        Map<String, String> ipMap =new HashMap<>();
        JSONObject ipJsonObject=new JSONObject();
        if(ipMatcher.find())
        //查找结果分成两部分，放在匹配结果数组里，一个是包含{ }]}的内容,group(0)
        {
            ipJson = ipMatcher.group(0);

            ipMap = new HashMap<String, String>();
            ipJsonObject = JSON.parseObject(ipJson);
            for (String key : ipJsonObject.keySet()) {
                ipMap.put(key, ipJsonObject.get(key).toString());
            }
            System.out.println("转换成map格式的结果是" + ipMap);
        }

        //1、ipJson获取data的内容，直接把data的字符串结果，进行截取。
       String dataV= ipMap.get("data");
        System.out.println(dataV);
        //通过substring截取data字符串中{}里面的内容。
        String dataJsonstr=dataV.substring(1,dataV.length()-1);
        System.out.println(dataJsonstr);
        //拿到的是个字符串dataJsonstr
        JSONObject dataJson = JSON.parseObject(dataJsonstr);

        //2、参照上节课，通过jsonObejct直接get 转成jsonArray的形式，获取出来就是JsonOBject.
        JSONArray dataArray1=ipJsonObject.getJSONArray("data");
        System.out.println("data数组的值是"+dataArray1);
        //类似于一个list，将resultarray这个对象中的内容按下标进行取值。
        //获取的时候获取的是Object类型，强转为JSONObject
        JSONObject resultJson = (JSONObject) dataArray1.get(0);
        System.out.println("data直接获取Json的结果是"+resultJson);

        //解析data中的内容。
        //存入Map中。
        Map<String,Object> datamap=new HashMap<>();
        for (String datakey : dataJson.keySet()) {
            datamap.put(datakey,dataJson.get(datakey));
        }
        System.out.println("datamap的存储内容"+datamap);

        //拼接字符串
        //map中存储的内容，分两种情况：
        String resultJsonStr="{";
        //for循环中，拼接每个键值对。
        for (String datakey : datamap.keySet()) {
            //判断是否是一个字符串。
            if(datamap.get(datakey) instanceof String) {
                //一种，是字符串，值会带上“值”
                //将值和键拼起来。
                //“键”: “值”,
                String key="\""+datakey+"\"";
                String maohao=":";
                String value="\""+datamap.get(datakey)+"\"";
                String douhao=",";
                resultJsonStr+=key+maohao+value+douhao;
            }
            else{
                //第二种，不是字符串，值不需要双引号。
                //将值和键拼起来。
                //“键”: 值,
                String key="\""+datakey+"\"";
                String maohao=":";
                String value=datamap.get(datakey).toString();
                String douhao=",";
                resultJsonStr+=key+maohao+value+douhao;
            }
        }//for循环结束，所有的键值对都已经拼接上了。
        //去掉最后的一个逗号
        resultJsonStr=resultJsonStr.substring(0,resultJsonStr.length()-1);
        resultJsonStr+="}";
        System.out.println("拼接的结果是："+resultJsonStr);

    }

}
